package persi.reporte;

import java.util.List;

import org.hibernate.CacheMode;
import org.hibernate.Criteria;

import persi.entities.Entidad;
import persi.futbol.Equipo;
import persi.hibernate.Home;

public abstract class AbstractReporter<T extends Entidad> {
	public static abstract class ReporterPrinter {
		private final Equipo equipo;
		private final Long cantidadGanados;

		public ReporterPrinter(final Equipo equipo, final Long cantidad) {
			this.equipo = equipo;
			this.cantidadGanados = cantidad;
		}

		public Long getCantidadGanados() {
			return cantidadGanados;
		}

		public Equipo getEquipo() {
			return equipo;
		}

		@Override
		public abstract String toString();
	}

	private final Home<T> home;

	public AbstractReporter(final Home<T> home) {
		this.home = home;
		this.initialize(home);
	}

	protected abstract Criteria construirCriterio();

	public List generar() {
		return this.construirCriterio().setCacheMode(CacheMode.NORMAL).list();

	}

	protected Home<T> getHome() {
		return home;
	}

	protected void initialize(final Home<T> home) {

	}
}
